package com.dx.chat.util;

/**
 * Description: byte工具类
 *
 * @author rockstarsteve
 * @version 1.0
 * @copyright Copyright (c) 电信
 * @since 2023/9/6
 */
public class ByteUtil {

    /**
     * （小端模式）
     * 将int数值转换为占四个字节的byte数组，本方法适用于(低位在前，高位在后)的顺序。 和bytesToInt（）配套使用
     *
     * @param value 要转换的int值
     * @return byte数组
     */
    public static byte[] intToBytes(int value) {
        byte[] src = new byte[4];
        src[3] = (byte) ((value >> 24) & 0xFF);
        src[2] = (byte) ((value >> 16) & 0xFF);
        src[1] = (byte) ((value >> 8) & 0xFF);
        src[0] = (byte) (value & 0xFF);
        return src;
    }

    /**
     * （小端模式）
     * byte数组中取int数值，本方法适用于(低位在前，高位在后)的顺序，和和intToBytes（）配套使用
     *
     * @param src byte数组
     * @return int数值
     */
    public static int bytesToInt(byte[] src) {
        int value;
        value = (int) ((src[0] & 0xFF)
                | ((src[0 + 1] & 0xFF) << 8)
                | ((src[0 + 2] & 0xFF) << 16)
                | ((src[0 + 3] & 0xFF) << 24));
        return value;
    }

    /**
     * 将bytes字节数组的内容都往后移动res位，即头部的两个位置空出来作为标志位
     *
     * @param bytes  原数组
     * @param offset 后移动位数
     * @return
     */
    public static byte[] reviseArray(byte[] bytes, int offset) {
        byte[] newBytes = new byte[bytes.length + offset];
        for (int i = 0; i < bytes.length; i++) {
            newBytes[i + offset] = bytes[i];
        }
        return newBytes;
    }
}
